package slw.utils
{
	import flash.display.BitmapData;
	import flash.geom.Rectangle;
	import flash.system.System;
	import flash.utils.ByteArray;
	
	/**
	 * BitmapDataEncode
	 * 位图数据编码解码类
	 * @author ddx<br/>
	 * 2011-6-16
	 *
	 */
	public class BitmapDataEncoder
	{
		//
		
		/**
		 * 构造函数
		 * 
		 */
		public function BitmapDataEncoder()
		{
			throw new Error("BitmapDataEncoder为静态类.");
		}
		/*
		-----------------------------------
		public  methods
		-----------------------------------
		*/
		//
		/**
		 * 将位图数据编码为字节流数组,字节数组中的数据顺序:bmd.width,bmd.height,bmd.transparent,bmd.getPixels()
		 * @param bmd:BitmapData
		 * @return ByteArray
		 * 
		 */		
		public static function encodeToByteArray(bmd:BitmapData):ByteArray{
			var $bytes:ByteArray=new ByteArray();
			$bytes.writeShort(bmd.width);
			$bytes.writeShort(bmd.height);
			$bytes.writeBoolean(bmd.transparent);
			
			var $bmdBytes:ByteArray=bmd.getPixels(bmd.rect);
			$bytes.writeBytes($bmdBytes);
			$bytes.compress();
			
			return $bytes;
		}
		//
		/**
		 * 将字节流解码为位图数据 
		 * @param bytes:ByteArray
		 * @return BitmapData
		 * 
		 */		
		public static function decodeFromByteArray(bytes:ByteArray):BitmapData{
			bytes.uncompress();
			bytes.position=0;
			
			var $width:Number=bytes.readShort();
			var $height:Number=bytes.readShort();
			var $transparent:Boolean=bytes.readBoolean();
			
			var $bmdBytes:ByteArray=new ByteArray();
			bytes.readBytes($bmdBytes);
			
			var $bmd:BitmapData=new BitmapData($width,$height,$transparent);
			$bmd.setPixels(new Rectangle(0,0,$width,$height),$bmdBytes);
			
			return $bmd;
		}
		/*
		-----------------------------------
		private  methods
		-----------------------------------
		*/
		
	}
}